@@ -204,7 +204,6 @@ def decrypt2(request):
204 204
             mieli = MchInfoEncryptLogInfo.objects.get(code_url=code)
205 205
         except MchInfoEncryptLogInfo.DoesNotExist:
206 206
             return response()
207
-    
208 207
 
209 208
     plaintext = mieli.plaintext
210 209
 

+ 1 - 1
api/member_views.py

@@ -229,7 +229,7 @@ def good_exchange(request):
229 229
                 })
230 230
             else:
231 231
                 pass
232
-        
232
+
233 233
         goods.append(good.data(user_id))
234 234
 
235 235
     return response(200, data={

+ 205 - 0
api/staff_views.py

@@ -0,0 +1,205 @@
1
+# -*- coding: utf-8 -*-
2
+
3
+from django.conf import settings
4
+from django.contrib.admin.views.decorators import staff_member_required
5
+from django.db import transaction
6
+from django_logit import logit
7
+from django_response import response
8
+from TimeConvert import TimeConvert as tc
9
+
10
+from integral.models import SaleclerkIntegralIncomeExpensesInfo, SaleclerkSubmitLogInfo
11
+from mch.models import BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelInfo, SaleclerkInfo
12
+from statistic.models import (DistributorSaleStatisticInfo, ModelSaleStatisticInfo, ProvinceSaleStatisticInfo,
13
+                              SaleclerkSaleStatisticInfo, SaleStatisticInfo)
14
+
15
+
16
+@logit
17
+@staff_member_required
18
+@transaction.atomic
19
+def del_clerk_sale_submit_api(request):
20
+    brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID)
21
+
22
+    sn = request.POST.get('sn', '')
23
+
24
+    try:
25
+        ssli = SaleclerkSubmitLogInfo.objects.get(code=sn)
26
+    except SaleclerkSubmitLogInfo.DoesNotExist:
27
+        return response()
28
+
29
+    if not ssli.status:
30
+        return response()
31
+
32
+    if ssli.is_staff_delete:
33
+        return response()
34
+
35
+    ssli.status = False
36
+    ssli.is_staff_delete = True
37
+    ssli.save()
38
+
39
+    SaleclerkIntegralIncomeExpensesInfo.objects.filter(code=sn).update(status=False)
40
+
41
+    try:
42
+        brand = BrandInfo.objects.get(brand_id=ssli.brand_pk)
43
+    except BrandInfo.DoesNotExist:
44
+        return response()
45
+
46
+    try:
47
+        model = ModelInfo.objects.get(pk=ssli.model_pk)
48
+    except SaleclerkInfo.DoesNotExist:
49
+        return response()
50
+
51
+    try:
52
+        clerk = SaleclerkInfo.objects.select_for_update().get(clerk_id=ssli.clerk_id, status=True)
53
+    except SaleclerkInfo.DoesNotExist:
54
+        return response()
55
+
56
+    try:
57
+        distributor = DistributorInfo.objects.get(distributor_id=clerk.distributor_id)
58
+    except DistributorInfo.DoesNotExist:
59
+        return response()
60
+
61
+    integral = model.integral
62
+
63
+    clerk.num -= 1
64
+    clerk.integral -= integral
65
+    clerk.total_integral -= integral
66
+    clerk.save()
67
+
68
+    ymd = tc.local_string(format='%Y%m%d')
69
+
70
+    if not clerk.test_user and not ssli.dupload:
71
+        # 日销量统计
72
+        ssi, _ = SaleStatisticInfo.objects.select_for_update().get_or_create(
73
+            brand_id=brand.brand_id,
74
+            ymd=ymd,
75
+        )
76
+        ssi.num -= 1
77
+        ssi.save()
78
+        # 月销量统计
79
+        ssi, _ = SaleStatisticInfo.objects.select_for_update().get_or_create(
80
+            brand_id=brand.brand_id,
81
+            ymd=ymd[:6],
82
+        )
83
+        ssi.num -= 1
84
+        ssi.save()
85
+        # 年销量统计
86
+        ssi, _ = SaleStatisticInfo.objects.select_for_update().get_or_create(
87
+            brand_id=brand.brand_id,
88
+            ymd=ymd[:4],
89
+        )
90
+        ssi.num -= 1
91
+        ssi.save()
92
+
93
+        # 型号销量统计
94
+        mssi, _ = ModelSaleStatisticInfo.objects.select_for_update().get_or_create(
95
+            brand_id=brand.brand_id,
96
+            model_name=model.model_uni_name,
97
+            ymd=ymd,
98
+        )
99
+        mssi.saleclerks.remove(clerk.clerk_id)
100
+        mssi.num = len(mssi.saleclerks)
101
+        mssi.save()
102
+
103
+        mssi, _ = ModelSaleStatisticInfo.objects.select_for_update().get_or_create(
104
+            brand_id=brand.brand_id,
105
+            model_name=model.model_uni_name,
106
+            ymd=ymd[:6],
107
+        )
108
+        mssi.saleclerks.remove(clerk.clerk_id)
109
+        mssi.num = len(mssi.saleclerks)
110
+        mssi.save()
111
+
112
+        mssi, _ = ModelSaleStatisticInfo.objects.select_for_update().get_or_create(
113
+            brand_id=brand.brand_id,
114
+            model_name=model.model_uni_name,
115
+            ymd=ymd[:4],
116
+        )
117
+        mssi.saleclerks.remove(clerk.clerk_id)
118
+        mssi.num = len(mssi.saleclerks)
119
+        mssi.save()
120
+
121
+        # 经销商销量统计
122
+        dssi, _ = DistributorSaleStatisticInfo.objects.select_for_update().get_or_create(
123
+            brand_id=brand.brand_id,
124
+            distributor_id=distributor.distributor_id,
125
+            ymd=ymd,
126
+        )
127
+        dssi.distributor_name = distributor.distributor_name
128
+        dssi.num -= 1
129
+        dssi.save()
130
+
131
+        dssi2, _ = DistributorSaleStatisticInfo.objects.select_for_update().get_or_create(
132
+            brand_id=brand.brand_id,
133
+            distributor_id=distributor.distributor_id,
134
+            ymd=0,
135
+        )
136
+        dssi2.distributor_name = distributor.distributor_name
137
+        dssi2.num -= 1
138
+        dssi2.save()
139
+
140
+        # 日省份销量统计
141
+        pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
142
+            brand_id=brand.brand_id,
143
+            province_code=distributor.distributor_province_code,
144
+            ymd=ymd,
145
+        )
146
+        pssi.province_name = distributor.distributor_province_name
147
+        pssi.num -= 1
148
+        pssi.save()
149
+        # 月省份销量统计
150
+        pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
151
+            brand_id=brand.brand_id,
152
+            province_code=distributor.distributor_province_code,
153
+            ymd=ymd[:6],
154
+        )
155
+        pssi.province_name = distributor.distributor_province_name
156
+        pssi.num -= 1
157
+        pssi.save()
158
+        # 年省份销量统计
159
+        pssi, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
160
+            brand_id=brand.brand_id,
161
+            province_code=distributor.distributor_province_code,
162
+            ymd=ymd[:4],
163
+        )
164
+        pssi.province_name = distributor.distributor_province_name
165
+        pssi.num -= 1
166
+        pssi.save()
167
+
168
+        # 日销售员销量统计
169
+        sssi, _ = SaleclerkSaleStatisticInfo.objects.select_for_update().get_or_create(
170
+            brand_id=brand.brand_id,
171
+            clerk_id=clerk.clerk_id,
172
+            ymd=ymd,
173
+        )
174
+        sssi.distributor_id = distributor.distributor_id
175
+        sssi.distributor_name = distributor.distributor_name
176
+        sssi.distributor_short_name = distributor.distributor_short_name
177
+        sssi.clerk_name = clerk.clerk_name
178
+        sssi.num -= 1
179
+        sssi.save()
180
+        # 月销售员销量统计
181
+        sssi, _ = SaleclerkSaleStatisticInfo.objects.select_for_update().get_or_create(
182
+            brand_id=brand.brand_id,
183
+            clerk_id=clerk.clerk_id,
184
+            ymd=ymd[:6],
185
+        )
186
+        sssi.distributor_id = distributor.distributor_id
187
+        sssi.distributor_name = distributor.distributor_name
188
+        sssi.distributor_short_name = distributor.distributor_short_name
189
+        sssi.clerk_name = clerk.clerk_name
190
+        sssi.num -= 1
191
+        sssi.save()
192
+        # 年销售员销量统计
193
+        sssi, _ = SaleclerkSaleStatisticInfo.objects.select_for_update().get_or_create(
194
+            brand_id=brand.brand_id,
195
+            clerk_id=clerk.clerk_id,
196
+            ymd=ymd[:4],
197
+        )
198
+        sssi.distributor_id = distributor.distributor_id
199
+        sssi.distributor_name = distributor.distributor_name
200
+        sssi.distributor_short_name = distributor.distributor_short_name
201
+        sssi.clerk_name = clerk.clerk_name
202
+        sssi.num -= 1
203
+        sssi.save()
204
+
205
+    return response(200, 'Del Success', u'删除成功')

+ 7 - 3
api/urls.py

@@ -6,7 +6,7 @@ from django_file_upload import views as file_views
6 6
 from account import tourguide_views
7 7
 from account import views as account_views
8 8
 from api import (admin_views, clerk_views, distributor_views, encrypt_views, mch_views, member_views, model_views,
9
-                 operator_views, sr_views, log_views)
9
+                 operator_views, sr_views, staff_views, log_views)
10 10
 from box import views as box_views
11 11
 from geo import views as geo_views
12 12
 from group import (groupuser_views, lensman_views, tourguidegroup_views, tourguidegroupadmin_views,
@@ -295,7 +295,7 @@ urlpatterns += [
295 295
     url(r'^admin/query_userinfo$', admin_views.query_userinfo, name='query_userinfo'),
296 296
     url(r'^admin/userinfo_update$', admin_views.userinfo_update, name='userinfo_update'),
297 297
 
298
-    #statistic
298
+    # statistic
299 299
     url(r'^admin/statistic/user_profile$', admin_views.statistic_userprofile, name='statistic_userprofile'),
300 300
     url(r'^admin/statistic/consumer/daily$', admin_views.statistic_daily, name='statistic_daily'),
301 301
     url(r'^admin/statistic/consumer/model$', admin_views.statistic_model, name='statistic_model'),
@@ -343,4 +343,8 @@ urlpatterns += [
343 343
 
344 344
 urlpatterns += [
345 345
     url(r'^log/camera/adaptive$', log_views.collect_camera_adaptive_log, name='log_camera_adaptive'),
346
-]
346
+]
347
+
348
+urlpatterns += [
349
+    url(r'^del/clerk/sale/submit$', staff_views.del_clerk_sale_submit_api, name='del_clerk_sale_submit_api'),
350
+]

+ 1 - 2
commands/management/commands/gis.py

@@ -69,12 +69,11 @@ class Command(CompatibilityBaseCommand):
69 69
                     user_id = v.get('user_id', '')
70 70
                     ymd = v.get('ymd', '')
71 71
 
72
-                    #更新用户表
72
+                    # 更新用户表
73 73
                     user = UserInfo.objects.get(user_id=user_id, status=True)
74 74
                     user.province_name = ProvinceShortModelMixin.PROVINCE_CODE_NAME_DICT.get(province_code)
75 75
                     user.save()
76 76
 
77
-
78 77
                     # [消费者维度]省份销量统计
79 78
                     # 日
80 79
                     cpssi, _ = ConsumeProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(

+ 1 - 0
coupon/tests.py

@@ -3,4 +3,5 @@ from __future__ import unicode_literals
3 3
 
4 4
 from django.test import TestCase
5 5
 
6
+
6 7
 # Create your tests here.

+ 1 - 0
coupon/views.py

@@ -3,4 +3,5 @@ from __future__ import unicode_literals
3 3
 
4 4
 from django.shortcuts import render
5 5
 
6
+
6 7
 # Create your views here.

+ 20 - 0
integral/migrations/0013_saleclerksubmitloginfo_is_staff_delete.py

@@ -0,0 +1,20 @@
1
+# -*- coding: utf-8 -*-
2
+# Generated by Django 1.11.28 on 2020-03-01 12:52
3
+from __future__ import unicode_literals
4
+
5
+from django.db import migrations, models
6
+
7
+
8
+class Migration(migrations.Migration):
9
+
10
+    dependencies = [
11
+        ('integral', '0012_saleclerksubmitloginfo_is_wxwork'),
12
+    ]
13
+
14
+    operations = [
15
+        migrations.AddField(
16
+            model_name='saleclerksubmitloginfo',
17
+            name='is_staff_delete',
18
+            field=models.BooleanField(db_index=True, default=False, help_text='\u662f\u5426\u7ba1\u7406\u5458\u5220\u9664', verbose_name='is_staff_delete'),
19
+        ),
20
+    ]

+ 2 - 0
integral/models.py

@@ -114,6 +114,8 @@ class SaleclerkSubmitLogInfo(BaseModelMixin):
114 114
 
115 115
     is_wxwork = models.BooleanField(_(u'is_wxwork'), default=False, help_text=_(u'是否为企业微信端'), db_index=True)
116 116
 
117
+    is_staff_delete = models.BooleanField(_(u'is_staff_delete'), default=False, help_text=_(u'是否管理员删除'), db_index=True)
118
+
117 119
     class Meta:
118 120
         verbose_name = _(u'saleclerksubmitloginfo')
119 121
         verbose_name_plural = _(u'saleclerksubmitloginfo')

+ 3 - 0
logs/admin.py

@@ -21,15 +21,18 @@ class MchLogInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin):
21 21
     list_filter = ('operator_id', 'app_version', 'status')
22 22
     search_fields = ('operator_id', 'app_version')
23 23
 
24
+
24 25
 class MchLogInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin):
25 26
     list_display = ('log_id', 'log_file', 'operator_id', 'app_version', 'status', 'created_at', 'updated_at')
26 27
     list_filter = ('operator_id', 'app_version', 'status')
27 28
     search_fields = ('operator_id', 'app_version')
28 29
 
30
+
29 31
 class MchSearchModelAndCameraLogInfoAdmin(admin.ModelAdmin):
30 32
     list_display = ('user_id', 'is_search_model', 'is_selected_model', 'is_search_camera', 'is_search_model_camera', 'is_search_camera_after_model', 'created_at')
31 33
     list_filter = ('is_search_model', 'is_selected_model', 'is_search_camera', 'is_search_model_camera', 'is_search_camera_after_model')
32 34
 
35
+
33 36
 admin.site.register(MchInfoDecryptLogInfo, MchInfoDecryptLogInfoAdmin)
34 37
 admin.site.register(MchInfoEncryptLogInfo, MchInfoEncryptLogInfoAdmin)
35 38
 admin.site.register(MchSearchModelAndCameraLogInfo, MchSearchModelAndCameraLogInfoAdmin)

+ 2 - 1
logs/models.py

@@ -72,6 +72,7 @@ class MchLogInfo(BaseModelMixin):
72 72
     def __unicode__(self):
73 73
         return unicode(self.pk)
74 74
 
75
+
75 76
 class MchSearchModelAndCameraLogInfo(BaseModelMixin):
76 77
     user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)
77 78
 
@@ -88,4 +89,4 @@ class MchSearchModelAndCameraLogInfo(BaseModelMixin):
88 89
         verbose_name_plural = _(u'mchsearchmodelandcameraloginfo')
89 90
 
90 91
     def __unicode__(self):
91
-        return unicode(self.pk)
92
+        return unicode(self.pk)

+ 2 - 1
mch/models.py

@@ -635,7 +635,7 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin):
635 635
             model_info = ModelInfo.objects.get(model_id=self.model_id)
636 636
         except ModelInfo.DoesNotExist:
637 637
             model_info = {}
638
-        
638
+
639 639
         return {
640 640
             'model_name': self.model_name,
641 641
             'serialNo': self.serialNo,
@@ -644,6 +644,7 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin):
644 644
             'created_at': tc.local_string(self.created_at, format='%Y-%m-%d'),
645 645
         }
646 646
 
647
+
647 648
 class ActivityInfo(BaseModelMixin):
648 649
     FIXED_EXPIRED_TIME = 0
649 650
     CHANGED_EXPIRED_TIME = 1

+ 1 - 1
member/models.py

@@ -91,7 +91,7 @@ class GoodsInfo(BaseModelMixin):
91 91
             'able': True,
92 92
             'value': self.value,
93 93
         }
94
-    
94
+
95 95
     def details(self, user_id):
96 96
         detail = self.data(user_id)
97 97
         detail['desc'] = self.desc

+ 2 - 15
page/sale_views.py

@@ -97,9 +97,7 @@ def clerk_sale_submit_api(request):
97 97
     ymd = tc.local_string(format='%Y%m%d')
98 98
 
99 99
     # 是否被消费者扫过
100
-    has_scan = ConsumeInfoSubmitLogInfo.objects.filter(
101
-        model_id=model.model_id,
102
-        serialNo=serialNo).exists()
100
+    has_scan = ConsumeInfoSubmitLogInfo.objects.filter(model_id=model.model_id, serialNo=serialNo).exists()
103 101
 
104 102
     # 店员提交记录
105 103
     ssli = SaleclerkSubmitLogInfo.objects.create(
@@ -239,7 +237,6 @@ def clerk_sale_submit_api(request):
239 237
         mssi.num = len(mssi.saleclerks)
240 238
         mssi.save()
241 239
 
242
-
243 240
         # 经销商销量统计
244 241
         dssi, _ = DistributorSaleStatisticInfo.objects.select_for_update().get_or_create(
245 242
             brand_id=brand.brand_id,
@@ -287,15 +284,6 @@ def clerk_sale_submit_api(request):
287 284
         pssi.num += 1
288 285
         pssi.save()
289 286
 
290
-        # pssi2, _ = ProvinceSaleStatisticInfo.objects.select_for_update().get_or_create(
291
-        #     brand_id=brand.brand_id,
292
-        #     province_code=distributor.distributor_province_code,
293
-        #     ymd=0,
294
-        # )
295
-        # pssi2.province_name = distributor.distributor_province_name
296
-        # pssi2.num += 1
297
-        # pssi2.save()
298
-
299 287
         # 日销售员销量统计
300 288
         sssi, _ = SaleclerkSaleStatisticInfo.objects.select_for_update().get_or_create(
301 289
             brand_id=brand.brand_id,
@@ -451,9 +439,8 @@ def clerk_checkout_serialNo_api(request):
451 439
     except SaleclerkInfo.DoesNotExist:
452 440
         return response(SaleclerkStatusCode.CLERK_NOT_FOUND)
453 441
 
454
-
455 442
     log = MchInfoEncryptLogInfo.objects.filter(model_pk=model_pk, sn=serialNo)
456
-    
443
+
457 444
     if not log:
458 445
         return response(ProductMachineStatusCode.SN_NOT_FOUND)
459 446
 

+ 0 - 2
pre/market_code.py

@@ -37,5 +37,3 @@ def marketcodedownload(application_id, code_start, code_end, isv_application_id=
37 37
                 code_index=code_index,
38 38
                 code_url=code_url
39 39
             )
40
-
41
-

+ 1 - 1
pre/views.py

@@ -7,7 +7,7 @@ from django.conf import settings
7 7
 from pysnippets.strsnippets import strip
8 8
 from TimeConvert import TimeConvert as tc
9 9
 
10
-from mch.models import BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelInfo, ModelCameraBodyInfo
10
+from mch.models import BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, ModelCameraBodyInfo, ModelInfo
11 11
 from statistic.models import (ConsumeDistributorSaleStatisticInfo, ConsumeModelSaleStatisticInfo,
12 12
                               ConsumeProvinceSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo,
13 13
                               DistributorSaleStatisticInfo, ModelSaleStatisticInfo, ProvinceSaleStatisticInfo,

+ 1 - 0
shells/admin.py

@@ -3,4 +3,5 @@ from __future__ import unicode_literals
3 3
 
4 4
 from django.contrib import admin
5 5
 
6
+
6 7
 # Register your models here.

+ 1 - 0
shells/models.py

@@ -3,4 +3,5 @@ from __future__ import unicode_literals
3 3
 
4 4
 from django.db import models
5 5
 
6
+
6 7
 # Create your models here.

+ 1 - 0
shells/tests.py

@@ -3,4 +3,5 @@ from __future__ import unicode_literals
3 3
 
4 4
 from django.test import TestCase
5 5
 
6
+
6 7
 # Create your tests here.

mini/login 返回是否为网销 · c59a09037f - Gogs: Go Git Service

mini/login 返回是否为网销

FFIB 6 years ago
parent
commit
c59a09037f
1 changed files with 1 additions and 0 deletions
  1. 1 0
      mch/models.py

+ 1 - 0
mch/models.py

@@ -373,6 +373,7 @@ class SaleclerkInfo(BaseModelMixin, SexModelMixin):
373 373
             'status': self.user_status,
374 374
             'refused_reason': self.refused_reason,
375 375
             'is_auth': self.is_auth,
376
+            'is_online_sales': self.is_online_sales,
376 377
         }
377 378
 
378 379
     data = admindata